#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Times;
using Cephei.QL.Math;
using Cephei.QL.Indexes;
using Cephei.QL.Termstructures;
using Cephei.QL.Termstructures.Inflation;
namespace Cephei.QL.Experimental.Inflation
{
    /// <summary> 
	/// ! The inflation index MUST contain a ZeroInflationTermStructure as this is used to create ATM.  Unlike YoY price surfaces we assume that 1) an ATM ZeroInflationTermStructure is available and 2) that it is safe to use it.  This is supported by the fact that no stripping is required for CPI cap/floors as they only give one flow.  cpi cap/floors have a single (one) flow (unlike nominal caps) because they observe cumulative inflation up to their maturity.  Options are on CPI(T)/CPI(0) but strikes are quoted for yearly average inflation, so require transformation via (1+quote)^T to obtain actual strikes.  These are consistent with ZCIIS quoting conventions.  The observationLag is that for the referenced instrument prices. Strikes are as-quoted not as-used.
	/// </summary>
    [Guid ("C4749C5B-F81F-4bf8-81EB-2589579B9436"),ComVisible(true)]
	public interface ICPICapFloorTermPriceSurface : Cephei.QL.Termstructures.IInflationTermStructure
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 DateTime BaseDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 QL.Times.BusinessDayConventionEnum BusinessDayConvention {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double CapPrice(DateTime d, Double k);
        /// <summary> 
		/// 
		/// </summary>
		 Double CapPrice(Cephei.QL.Times.IPeriod d, Double k);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Math.IMatrix CapPrices {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Double> CapStrikes {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime CpiOptionDateFromTenor(Cephei.QL.Times.IPeriod p);
        /// <summary> 
		/// 
		/// </summary>
		 Double FloorPrice(DateTime d, Double k);
        /// <summary> 
		/// 
		/// </summary>
		 Double FloorPrice(Cephei.QL.Times.IPeriod d, Double k);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Math.IMatrix FloorPrices {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Double> FloorStrikes {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Cephei.QL.Times.IPeriod> Maturities {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime MaxDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MaxStrike {get;}
        /// <summary> 
		/// 
		/// </summary>
		 DateTime MinDate {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double MinStrike {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Nominal {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Times.IPeriod ObservationLag {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double Price(DateTime d, Double k);
        /// <summary> 
		/// 
		/// </summary>
		 Double Price(Cephei.QL.Times.IPeriod d, Double k);
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.Core.IVector<Double> Strikes {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Cephei.QL.Indexes.IZeroInflationIndex ZeroInflationIndex {get;}
    }   

    /// <summary> 
	/// ! The inflation index MUST contain a ZeroInflationTermStructure as this is used to create ATM.  Unlike YoY price surfaces we assume that 1) an ATM ZeroInflationTermStructure is available and 2) that it is safe to use it.  This is supported by the fact that no stripping is required for CPI cap/floors as they only give one flow.  cpi cap/floors have a single (one) flow (unlike nominal caps) because they observe cumulative inflation up to their maturity.  Options are on CPI(T)/CPI(0) but strikes are quoted for yearly average inflation, so require transformation via (1+quote)^T to obtain actual strikes.  These are consistent with ZCIIS quoting conventions.  The observationLag is that for the referenced instrument prices. Strikes are as-quoted not as-used. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface ICPICapFloorTermPriceSurface_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
    }
}

